package session;

import java.io.Serializable;
import java.util.List;
/**
 * Generički dao bean koju nasleđuju svi dao binovi
 * 
 * @author rigo & jung
 *
 * @param <T> tip entiteta
 * @param <ID> tip identifikatora entiteta
 */
public interface GenericDao<T, ID extends Serializable> {
  /**
   * Funkcija vraća tip entiteta
   * @return tip klase koja reprezentuje entitet
   */
  public Class<T> getEntityType();
  
  /**
   * Funkcija za pretragu po primarnom ključu(identifikatoru)
   * @param id identifikator pojava tipa entiteta
   * @return
   */
  public T findById(ID id);
  
  /**
   * Funkcija vrća sve pojave tipa entiteta
   * @return
   */
  public List<T> findAll();
  
  /**
   * Fukcija za dodavanje novog pojava tipa entiteta u bazu
   * @param entity pojava tipa entiteta koja se dodaje
   * @return 
   */
  public T persist(T entity);
  
  /**
   * Fukcija za izmenu pojava tipa entiteta u bazi
   * @param entity pojava tipa entiteta koja se menja
   * @return
   */
  public T merge(T entity);
  
  /**
   * Funkcija za uklanjanje pojave tipa entiteta iz baze
   * @param entity pojava tipa entiteta koja se ulkanja
   */
  public void remove(T entity);

}
